package com.liangtian.mdm.system.user.service;

import com.github.pagehelper.PageInfo;
import com.liangtian.mdm.base.exception.TransactionalException;
import com.liangtian.mdm.system.menu.model.Menu;
import com.liangtian.mdm.system.permission.model.SysRole;
import com.liangtian.mdm.system.user.model.SysUser;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>Encoding    :  UTF-8</p>
 * <p>Package Name: com.liangtian.mdm.system.user.service</p>
 * <p>Project Name: chccig-dm </p>
 * <p>Copyright   :  Copyright(c) 2016 石化盈科信息技术有限责任公司 </p>
 * <p>Created Time: 2016-04-25 14:08</p>
 * <p>Description : 用户服务接口</p>
 *
 * @author : Administrator
 * @version :  1.0
 */
public interface SysUserService {

    /**
     * @param Map
     * @return 分页条件下的
     * @desc 获取未提交的用户列表
     * @params参数详情 pageNum 总页数
     * @params参数详情 length 每页显示条数
     * @params参数详情 start 起始条数
     */
    PageInfo selectUserListWithNotSubmit(Map<String, Object> map);

    /**
     * @param Map
     * @return 分页条件下的
     * @desc 获取用户列表信息
     * @params参数详情 pageNum 总页数
     * @params参数详情 length 每页显示条数
     * @params参数详情 start 起始条数
     */
    PageInfo selectUserListByCondition(Map<String, Object> map);

    /**
     * * <p>Title: 查询不是本用户下，所有活动用户</p>
     * <p>Description: TODO </p>
     * <p>Company:@param map
     * <p>Company:@return </p>
     *
     * @author : xiaoliu
     * @date :2016年11月3日下午4:07:19
     */
    PageInfo queryUserListWithoutUserId(Map<String, Object> map);


    /**
     * @param Map
     * @return 分页条件下的
     * @desc 获取审核页面用户列表信息
     * @params参数详情 pageNum 总页数
     * @params参数详情 length 每页显示条数
     * @params参数详情 start 起始条数
     */
    PageInfo selectShUserListByCondition(Map<String, Object> map);

    /**
     * @param user
     * @return 分页条件下的
     * @desc 获取全部用户信息(包含查询)
     * @params参数详情 pageNum 总页数
     * @params参数详情 length 每页显示条数
     * @params参数详情 start 起始条数
     * @params参数详情 draw 请求次数
     */
    PageInfo selectUserPageByCondition(Map<String, Object> map);

    PageInfo queryUsers(Map<String, Object> map);

    /**
     * @param user 对象
     * @return 受影响的行数
     * @des 新增user
     */
    int insertUser(SysUser user);

    /**
     * @param user 对象
     * @return 受影响的行数
     * @desc 编辑 （编辑数据；启用-1；禁用-0）
     */
    int updateUser(SysUser user, Long[] ids) throws TransactionalException;

    /**
     * @param user 对象
     * @return 受影响的行数
     * @desc 编辑 （编辑数据；启用-1；禁用-0）
     */
    int updateUser(SysUser user);

    //用户新增界面新增用户数据
    int addUser(SysUser user);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 批量删除用户信息
     * @params参数详情 idsList 用户id
     */
    int batchDeleteUser(Map<String, Object> params) throws TransactionalException;

    /**
     * @param params
     * @return 受影响的行数
     * @desc 校验用户账户
     * @params参数详情 userId 用户id
     * @params参数详情 userAccount 用户账号
     */
    int selectUserAccount(Map<String, Object> params);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 编辑用户状态
     * @params参数详情 idsList 用户id
     * @params参数详情 userStatus 用户状态
     */
    int editUserStatus(Map<String, Object> params);

    /**
     * 根据id查询用户
     *
     * @param user
     * @return
     */
    SysUser selectUserById(SysUser user);

    //根据id批量查询用户
    List<SysUser> selectUserByIds(String ids);

    /**
     * 根据id查询用户
     *
     * @param user
     * @return
     */
    Map<String, Object> selectUserWithOrganizaNameById(SysUser user);

    /**
     * 查询角色信息
     *
     * @param user
     * @return
     */
    List<SysRole> selectRole(SysUser user);

    /**
     * 查询用户组信息
     *
     * @param userId
     * @return
     */
    List<Map<String, Object>> selectUserGroup(Long userId);

    /**
     * @param params 用户帐号
     * @return 用户信息
     * @desc 根据帐号查询用户
     */
    SysUser queryUserByUserAccount(String userAccount);

    /**
     * 菜单树查询
     *
     * @param menu
     * @return
     */
    public List<Menu> menuTree(Map<String, Object> params);

    /**
     * @param Map
     * @return 分页条件下的用户组
     * @desc 获取用户组信息
     * @params参数详情 pageNum 总页数
     */
    PageInfo queryUserGroup(Map<String, Object> param, SysUser user);

    /**
     * @param Map
     * @return 分页条件下的用户组
     * @desc 获取全部的用户组
     * @params参数详情 pageNum 总页数
     */
    PageInfo queryUserGroupList(Map<String, Object> map);

    /**
     * @param Map
     * @return 分页条件下的用户组
     * @desc 获取用户所属的用户组
     * @params参数详情 pageNum 总页数
     */
    PageInfo queryTheUserGroup(Map<String, Object> param);

    /**
     * @param Map
     * @des 新增用户组
     */
    boolean insertUserGroup(Map<String, Object> param);

    /**
     * @param params
     * @desc 批量删除用户组
     */
    boolean deleteUserGroup(Map<String, Object> params);

    /**
     * @param params
     * @desc 用户审核
     */
    int approve(List<SysUser> list);

    /**
     * @param params
     * @desc 用户批量创建_删除
     */
    int delete(Map<String, Object> map);

    /**
     * @param params
     * @desc 用户密码重置
     */
    int resetPass(List<SysUser> suLst);

    /**
     * @param params
     * @desc 批量操作冻结，解冻数据
     */
    int updateByIds(Map<String, Object> map);

    /**
     * @param params
     * @desc 用户批量创建_提交
     */
    int submit(Map<String, Object> param);

    /**
     * @desc 导入模板导出
     * String modelId,
     */
    void templeExport(HttpServletResponse resp);

    /**
     * @param params
     * @desc 用户权限复制--菜单权限赋值
     */
    int updateUserMenuAuthority(Map<String, Object> param);

    /**
     * @param params
     * @desc 用户权限复制--按钮权限赋值
     */
    int updateUserButtonAuthority(Map<String, Object> param);

    /**
     * @param params
     * @desc 用户权限复制--视图权限赋值
     */
    int updateUserGroupAuthority(Map<String, Object> param);

    /**
     * * <p>Title: 查询当前用户账号是否被使用</p>
     * <p>Description: TODO </p>
     * <p>Company:@param userAccount
     * <p>Company:@return </p>
     *
     * @author : xiaoliu
     * @date :2016年10月27日下午2:58:09
     */
    public int queryExistByAccount(String userAccount);

    /**
     * 移动端用户和登录
     *
     * @param userAccount : 用户账号
     *                    passWord    : 账号密码
     * @return
     * @author jyh
     * @date 2017-06-06
     */
    public SysUser mobileCheckLogin(String userAccount, String passWord);

    /**
     * @param user 对象
     * @return 受影响的行数
     * @desc 编辑密码
     */
    int updatePwd(Map map);
}
